package com.zhisheng.utils;

import io.jsonwebtoken.*;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

import java.util.Date;
import java.util.HashMap;
import java.util.Map;

@Component
public class MyJwtUtils_0_9_1 {

    // 从配置文件中读取密钥
    @Value("${jwt.secret}")
    private String secret;

    // 从配置文件中读取令牌过期时间（毫秒）
    @Value("${jwt.expiration}")
    private Long expiration;


    public String createToken(String jsonClaims) {
        Map<String,Object> claims = new HashMap<>();
        claims.put("body",jsonClaims);
        return Jwts.builder()
                .setClaims(claims)
                .setIssuedAt(new Date(System.currentTimeMillis()))
                .setExpiration(new Date(System.currentTimeMillis() + expiration))
                .signWith(SignatureAlgorithm.HS512, secret)
                .compact();
    }

    /**
     * 解析令牌，获取声明信息
     * @param token JWT 令牌
     * @return 声明信息
     */
    public String getClaimsFromToken(String token) {
        try {
            return (String)Jwts.parser()
                    .setSigningKey(secret)
                    .parseClaimsJws(token)
                    .getBody().get("body");
        } catch (Exception e) {
            //throw new RuntimeException(e);
            e.printStackTrace();
            return "令牌解析失败!";
        }
    }
}